# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private

# IIAB
{% if iiab_wireless_lan_iface is defined %}
denyinterfaces {{ iiab_wireless_lan_iface }}
{% endif %}

# Setting iiab_wired_lan_iface would install the device as a slave under
# br0 so we need to turn off the dhcp client in that network layout.
# Auto creation of the wired slave is suppressed in discovered_network.yml
# -> Set iiab_wired_lan_iface if present is conditional on is_raspbian
# Slave creation can be forced by populating local_vars.yml with
# 'iiab_wired_lan_iface: eth0' which populates /etc/network/interfaces.d/iiab
# with 'bridge_ports eth0' in place of 'bridge_ports none'
# Always (try) to run DHCP client on RPi's Ethernet port, for in-field
# "cablemodems" used by many non-technical operators, who want Zero-Hassle
# Updates.  This means AVOIDING "denyinterfaces eth0" below:
{% if iiab_wired_lan_iface is defined %}
denyinterfaces {{ iiab_wired_lan_iface }}
{% endif %}

{% if dhcpcd_result == "enabled" and iiab_lan_iface != "none" %}
interface {{ iiab_lan_iface }}
{% if network_172 %}
static ip_address={{ lan_ip }}/19
{% else %}
static ip_address={{ lan_ip }}/24
{% endif %}
static domain_name_servers=127.0.0.1
{% endif %}

# IIAB static IP configuration, possibly trying DHCP first
{% if wan_ip != "dhcp" %}
{% if wan_try_dhcp_before_static_ip %}
profile static_eth0
static ip_address={{ wan_ip }}/24
static routers={{ wan_gateway }}
static domain_name_servers={{ wan_nameserver }}

# Check for DHCP on the wire first (for occasional field updates of IIAB, e.g.
# Ethernet cable to a "cablemodem") before falling back to the above Static IP
# (e.g. IIAB as 192.168.1.99 in Chiapas, Mexico where schools have typically
# hard-coded their student PC's as 192.168.1.1, 192.168.1.2, 192.168.1.3, etc).
interface {{ iiab_wan_iface }}
fallback static_eth0
{% else %}
interface {{ iiab_wan_iface }}
static ip_address={{ wan_ip }}/24
static routers={{ wan_gateway }}
static domain_name_servers={{ wan_nameserver }}
{% endif %}
{% endif %}
